<?php
/**
* @software         [JiJinCMS]
* @author           [上海集锦信息科技有限公司]
* @website          [http://www.jijinweb.com]
* @email            [sunny@jijinweb.com]
**/
namespace app\admin\controller;
use app\BaseController;
use think\facade\View;
use think\facade\Db;
use think\facade\Request;
use think\facade\Session;
class Admin extends BaseController{
    public function initialize(){
        //
        $this->UserLogModel=new \app\admin\model\UserLogModel();
        //
        $this->user_id=     Session::get('user_id');
        $this->username=    Session::get('username');
        $this->token=       Session::get('token'); 
     
        //检测登录状态
        if(!$this->user_id){
            if(Request::isAjax()){
                $this->error("登录信息不存在，请重新登录",url("Login/index"));
            }else{
                return $this->redirect(url('login/index'));
            }
            
        }
        if(!\app\admin\model\UserModel::checkToken($this)){
            //$this->error("token失效，可能其他人员正在登录您的账号",url("Login/index"));
        }
        $path=Request()->controller()."/".Request()->action()	;
        //权限校验
        if(!$this->checkRule($path)){
            $this->error("您当前角色未授权此操作！");
        }
        //
        $pagetitle=Db::name("node")->where(array("name"=>$path))->order("pid desc")->value("title");    
        // 或者批量赋值
        View::assign([
            'user_id'  => $this->user_id,
            'username' => $this->username,
            'pagetitle'  => $pagetitle,
        ]);   
    } 
    //权限检测
    final protected function checkRule($rule){
        if($this->user_id==config('app.super_admin_user_id')){
            return true;//管理员允许访问任何页面
        }
        //这里只针对 已经添加过节点的控制器做验证，未增加到node表中的不做验证
        $node_id=Db::name('node')->where("name",$rule)->field('name')->value("id");
        //未找到不用做节点验证
        if(!$node_id){
            return true;
        }else{
            //找到的话需要做节点验证
            $role_ids=Db::name("role_user")->where(array("user_id"=>$this->user_id))->column("role_id");
            $where[]=["role_id","in",$role_ids];
            $where[]=["node_id","=",$node_id];
            return Db::name("access")->where($where)->find(); 
        }
    }    
    // URL重定向
    function redirect($url, $time=0, $msg='') {
        //多行URL地址支持
        $url = str_replace(array("\n", "\r"), '', $url);
        if (empty($msg))
            $msg = "系统将在{$time}秒之后自动跳转到{$url}！";
        if (!headers_sent()) { //如果标头没有发出
            // redirect
            if (0 === $time) {
                header('Location: ' . $url); //如果没有指定延时时间，则发一个跳转标头
            } else {
                header("refresh:{$time};url={$url}");//如果制定了延时时间，则发一个延时刷新的标头
                echo($msg);
            }
            exit();
        } else { //否则就发送 meta 标记，含义同上
            $str = "<meta http-equiv='Refresh' content='{$time};URL={$url}'>";
            if ($time != 0)
                $str .= $msg;
            exit($str);
        }
    }  
}
